home *** CD-ROM | disk | FTP | other *** search
- #include "crtlocal.h"
- #include <sys/ioctl.h>
- #include <sys/termios.h>
- #include <stdarg.h>
- #include <stdio.h>
-
- int ioctl __P((int fd, unsigned long cmd, ...))
- {
- va_list ap;
- void *structure;
- va_start(ap, cmd);
- structure = va_arg(ap, void *);
- #if DEBUG
- kprintf("ioctl fd=%d\n", fd);
- kprintf("ioctl base cmd=%X\n", cmd&255);
- kprintf("ioctl addr=%X, size = %d\n", (long)structure, IOCPARM_LEN(cmd));
- if (cmd&IOC_IN) kprintf("ioctl in\n");
- #endif
- if (cmd&IOC_OUT)
- {
- memset(structure, 0, IOCPARM_LEN(cmd));
- #if DEBUG
- kprintf("ioctl out\n");
- #endif
- }
- va_end(cmd);
- switch(IOCGROUP(cmd))
- {
- case 't':
- switch(cmd&255)
- {
- case 0: return -1;
- case 8:
- return -1;
- case 13: /* Set exclusive TTY use */; return 0;
- case 14: /* Clear exclusive TTY use */; return 0;
- case 18:
- return -1;
- case 19:
- {
- struct termios *term = structure;
- if ((crt_fd_tab[fd].fd&-256) == 100<<8)
- {
- /* just return dummy data */
- term->c_ispeed = term->c_ospeed = B9600;
- return 0;
- }
- return -1;
- break;
- }
- case 21: /* drain output */
- {
- return 0;
- }
- case 104:
- {
- struct winsize *ws = structure;
- ws->ws_row = 25;
- ws->ws_col = 80;
- ws->ws_xpixel = 640;
- ws->ws_ypixel = 400;
- return 0;
- }
- case 110: /* start output */
- {
- return 0;
- }
- case 116:
- return -1;
- case 118: return -1;
- case 119:
- *(long *)structure = 12345;
- return 0;
- case 124:
- return -1;
- default: kprintf("Unsupported TTY ioctl %d\n", cmd&255);
- return 0;
- }
- break;
- default:
- kprintf("ioctl group='%c' unsupported\n", IOCGROUP(cmd));
- }
- return -1;
- }
-
-